package com.zxjbyte.yiyi.framework.redis.lock.executor;

import java.util.concurrent.TimeUnit;

/**
 * redis分布式锁执行器接口
 * @Author zhangxingjia
 * @Date 2023/4/14 16:19
 * @Version: 1.0
 */
public interface IRLockExecutor<T> {




    /**
     * 加锁
     * @param lockKey  锁key
     * @param waitTime 等待时间: 表示尝试获取锁时最多等待的时间。如果在指定的等待时间内没有获取到锁，则方法会返回 false，表示获取锁失败
     * @param leaseTime 超时时间: 表示锁的持有时间，即锁的最大有效期。在获取锁成功后，锁会在指定的超时时间之后自动释放。超过这个时间后，锁会自动解锁，以防止死锁情况的发生。
     * @param unit 时间单位: 如 TimeUnit.MILLISECONDS 表示毫秒，TimeUnit.SECONDS 表示秒
     * @return 加锁信息
     */
    T acquire(String lockKey, long waitTime, long leaseTime, TimeUnit unit);

    /**
     *  加锁
     * @param lockKey
     * @param waitTime
     * @param leaseTime
     * @return
     */
    default T acquire(String lockKey, long waitTime, long leaseTime){
        return acquire(lockKey, waitTime, leaseTime, TimeUnit.MILLISECONDS);
    }

    /**
     * 解锁
     *
     * @param key          加锁key
     * @param lockInst 锁实例
     * @return 是否释放成功
     */
    boolean release(String key, T lockInst);
}
